﻿using System.Text.Json.Serialization;

namespace CardMaker.Library.Models;

public class SideImage {
    //todo
    public int TemplateId { get; set; }
    public int SideImageId { get; set; }
    [JsonInclude]
    public string SideImageName { get; set; }

    [JsonInclude]
    public string Scale { get; set; }

    public string SideImagePosition { get; set; }
    [JsonInclude]
    public int NumberOfKeXuanSideImage { get; set; }
    [JsonInclude]
    public List<string>? SideImageKeXuan { get; set; }//只能以addKeXuan添加，规范化名称

    [JsonIgnore]
    public List<byte[]> SideKeXuanImageBytes { get; set; }=new List<byte[]>();//初始化时默认生成



    [JsonConstructor]
    public SideImage(int templateId, int sideImageId, string sideImageName,
        string sideImagePosition, int numberOfKeXuanSideImage,
        List<string> sideImageKeXuan, string scale) {
        TemplateId = templateId;
        SideImageId = sideImageId;
        SideImageName = sideImageName;
        SideImagePosition = sideImagePosition;
        NumberOfKeXuanSideImage = numberOfKeXuanSideImage;
        SideImageKeXuan = sideImageKeXuan;
        Scale = scale;
    }

    public SideImage(int templateId, int sideImageId, string sideImageName, string sideImagePosition, int numberOfKeXuanSideImage, string scale)
    {
        TemplateId = templateId;
        SideImageId = sideImageId;
        SideImageName = sideImageName;
        SideImagePosition = sideImagePosition;
        NumberOfKeXuanSideImage = numberOfKeXuanSideImage;
        Scale = scale;
    }

    public SideImage(byte[]? sideImage, string KeXuanname, string scale) {
        Scale = scale;
        AddKeXuan(KeXuanname);
        SideKeXuanImageBytes.Add(sideImage);
    }

    //todo
    public string AddKeXuan(string name) {
        SideImageKeXuan ??= new();
        SideImageKeXuan.Add(TemplateId + "." + SideImageId + "." + name);
        return SideImageKeXuan[SideImageKeXuan.Count];
    }
    public Task AddKeXuan(string name, byte[]? image) {
        SideImageKeXuan ??= new List<string>();
        int i=0;
        i= SideImageKeXuan.FindIndex(x => x.Equals(TemplateId+"."+SideImageId+"."+name));
        if (i != -1) {
            //存在重名的结果，在正确下标位置插入图片
            SideKeXuanImageBytes?.Insert(i, item: image);
            return Task.CompletedTask;
        }
        //不存在重名结果，执行添加
        SideImageKeXuan.Add(TemplateId + "." + SideImageId + "." + name);
        SideKeXuanImageBytes?.Add(item: image);
        return Task.CompletedTask;
    }
    public Task InputStandKeXuan(string name, byte[]? image)
    {
        SideImageKeXuan ??= new List<string>();
        int i = 0;
        i = SideImageKeXuan.FindIndex(x => x.Equals(name));
        if (i != -1)
        {
            //存在重名的结果，在正确下标位置插入图片
            SideKeXuanImageBytes?.Insert(i, item: image);
            return Task.CompletedTask;
        }
        //不存在重名结果，执行添加
        SideImageKeXuan.Add(name);
        SideKeXuanImageBytes?.Add(item: image);
        return Task.CompletedTask;
    }
    public Task<List<byte[]>> GetSideBytesList() {
        return   Task.FromResult(this.SideKeXuanImageBytes);
    }
}